package com.sunny.ynhz.api;


import com.sunny.ynhz.bean.BannerBean;
import com.sunny.ynhz.bean.ChangePasswordBean;
import com.sunny.ynhz.bean.ChosseRiverBean;
import com.sunny.ynhz.bean.CurrentRiverBean;
import com.sunny.ynhz.bean.DeleteProblemBean;
import com.sunny.ynhz.bean.FileBean;
import com.sunny.ynhz.bean.HistoryPatrolBean;
import com.sunny.ynhz.bean.ImageBean;
import com.sunny.ynhz.bean.IndexProblemListBean;
import com.sunny.ynhz.bean.IndexProblemNumBean;
import com.sunny.ynhz.bean.LoginBean;
import com.sunny.ynhz.bean.MoreLineProBlemBean;
import com.sunny.ynhz.bean.NewsBean;
import com.sunny.ynhz.bean.NewsUnreadNumsBean;
import com.sunny.ynhz.bean.OfficeAdminBean;
import com.sunny.ynhz.bean.OneRiverOneRuleBean;
import com.sunny.ynhz.bean.OneRiverOneRuleDeatailBean;
import com.sunny.ynhz.bean.PartrolRouteBean;
import com.sunny.ynhz.bean.PathUploadBean;
import com.sunny.ynhz.bean.PatrolRiverTime;
import com.sunny.ynhz.bean.PatrolStatusBean;
import com.sunny.ynhz.bean.ProblemBean;
import com.sunny.ynhz.bean.ProblemStaticBean;
import com.sunny.ynhz.bean.ProblemTypeDataBean;
import com.sunny.ynhz.bean.RecentNewsBean;
import com.sunny.ynhz.bean.ResultImageBean;
import com.sunny.ynhz.bean.RingBean;
import com.sunny.ynhz.bean.RiverChiefBeanMsg;
import com.sunny.ynhz.bean.RiverDutyBean;
import com.sunny.ynhz.bean.RiverLogBean;
import com.sunny.ynhz.bean.SeasureAppBean;
import com.sunny.ynhz.bean.SecurityCodeBindingBean;
import com.sunny.ynhz.bean.StandardBean;
import com.sunny.ynhz.bean.StartPatrolBean;
import com.sunny.ynhz.bean.UploadProblemBean;
import com.sunny.ynhz.bean.WxyyBean;

import org.json.JSONObject;

import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import rx.Observable;


public interface ApiService {

    /**
     * 首页巡河动态
     *
     * @return
     */
    @POST("apphome/getapphomeheaderpic")
    Observable<BannerBean> getBannerPic();

    /**
     * 首页巡河动态
     *
     * @param userId 用户id
     * @return
     */
    @POST("problemandpatrol/getlatestproblempndpatrols")
    Observable<IndexProblemListBean> getPatrolNews(@Query("userId") String userId);

    /**
     * 提交问题时获得河道列表
     *
     * @param userId 用户id
     * @return
     */
    @POST("river/getReachCreekNames")
    Observable<ChosseRiverBean> getRiverList(@Query("userId") String userId);

    /**
     * 提交问题的时候获取行政区域列表
     *
     * @param addvcd 行政区域编码
     * @return
     */
    @POST("riveroffice/getRiverofficeByAddvcds")
    Observable<OfficeAdminBean> getAreaList(@Query("addvcd") String addvcd);

    /**
     * 获取首页新闻动态
     *
     * @param num 行数
     * @return
     */
    @POST("problem/getProblemDynamics")
    Observable<RecentNewsBean> getRecentNews(@Query("num") int num);

    /**
     * 获取首页新闻动态
     *
     * @param userId uerId
     * @param num    行数
     * @return
     */
    @POST("problem/getMyProblemByUserIds")
    Observable<RecentNewsBean> getMyReport(@Query("userId") String userId, @Query("num") int num);


    /**
     * 获取首页小红点数量
     *
     * @param userId
     * @return
     */
    @POST("problem/getBroblemTotalByUserIds")
    Observable<IndexProblemNumBean> getProblemNums(@Query("userId") String userId);

    /**
     * 获取首页新闻类栏目未读数量
     *
     * @param userId
     * @return
     */
    @POST("readingpraise/findAllTypeUnreadCount")
    Observable<NewsUnreadNumsBean> getNewsUnreadNums(@Query("userId") String userId);

    /**
     * 获取巡河状态
     *
     * @return
     */
    @POST("patroltrack/pollings.do")
    Observable<PatrolStatusBean> getPatrolStatus();

    /**
     * 获得历史巡河列表
     *
     * @return
     */
    @GET("json/patrolLists.json")
    Observable<HistoryPatrolBean> getPatrolHistroy();

    /**
     * 得到非巡河问题列表
     *
     * @param patrolId 巡河id
     * @return
     */
    @GET("problem/getProblemByPatrolIdAndPatrolmatters")
    Observable<RiverLogBean> getRiverLogs(@Query("patrolId") String patrolId);


    /**
     * @param problemId 问题ID
     * @param patrolId  巡河id
     * @return
     */
    @POST("problem/deleteBroblemByProblemIds")
    Observable<DeleteProblemBean> deleteProblem(@Query("problemId") String problemId, @Query("patrolId") String patrolId);


    /**
     * 上传问题类型
     *
     * @param type             问题类型
     * @param time             问题时间
     * @param userId           用户id
     * @param nativeprocessing 是否本级处理  0是不在本级处理,1是在本级处理
     * @param lttd             纬度
     * @param lgtd             经度
     * @param position         问题地点,反地理编码
     * @param describe         问题详情
     * @param addvcd           行政编码
     * @param patrolId         巡河id
     * @param picture          图片拼接字符串“;”用于分割
     * @param video            视频，同图片
     * @param proResource      问题来源
     * @param ispatrol         1:巡河问题 2:非巡河问题
     * @param cuur_userId      职能部门id
     * @param sectionId        河道id
     * @return
     */
    @POST("problem/insertProblems")
    Observable<UploadProblemBean> uploadProblem(@Query("type") String type, @Query("time") String time, @Query("userId") String userId,
                                                @Query("nativeprocessing") String nativeprocessing,
                                                @Query("lttd") Double lttd, @Query("lgtd") Double lgtd,
                                                @Query("position") String position, @Query("describe") String describe, @Query("addvcd") String addvcd,
                                                @Query("patrolid") String patrolId, @Query("picture") String picture, @Query("video") String video,
                                                @Query("proResource") String proResource, @Query("ispatrol") String ispatrol, @Query("cuur_userId") String cuur_userId,
                                                @Query("sectionId") String sectionId, @Query("reachId") String reachId);


    /**
     * 登陆
     *
     * @param login_name 用户名
     * @param password   密码
     * @param isSign     是否签到
     * @param devicecode 设备IMEI
     * @param vercode    验证码
     * @return
     */
    @POST("mobileloginv3s")
    Observable<LoginBean> login(@Query("login_name") String login_name, @Query("password") String password,
                                @Query("isSign") Boolean isSign, @Query("devicecode") String devicecode, @Query("vercode") String vercode);


    /**
     * 修改密码
     *
     * @param loginName   用户名
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return
     */
    @GET("modifyPwdForMobilev2s")
    Observable<ChangePasswordBean> changePassword(@Query("login_name") String loginName, @Query("oldPassword") String oldPassword, @Query("newPassword") String newPassword);


    /**
     * 上传巡河图片
     *
     * @param options                参数
     * @param externalFileParameters 文件
     * @return ResultImageBean
     */
    @POST("common/upload/uploadImgs")
    @Multipart
    Observable<ResultImageBean> uploadFileInfo(@QueryMap Map<String, String> options,
                                               @PartMap Map<String, RequestBody> externalFileParameters);

    /**
     * 在线离线巡河上传（新的接口）
     *
     * @param patrolId               巡河场次id
     * @param userId                 用户id
     * @param isOnLine               是否在线巡河
     * @param starttime              开时时间
     * @param endtime                结束时间
     * @param riverId                河涌id
     * @param sectionId              河段id
     * @param distance               巡河距离
     * @param isEnd                  是否结束
     * @param startLgtd              巡河开始经度
     * @param startLttd              巡河开始纬度
     * @param endLgtd                巡河结束经度
     * @param endLttd                巡河结束纬度
     * @param externalFileParameters 路径json
     * @return
     */
    @POST("patrol/addOrUpdatePatrol")
    @Multipart
    Observable<PathUploadBean> uploadPatrol(@Query("patrolId") String patrolId, @Query("userId") String userId,
                                            @Query("isOnLine") boolean isOnLine,
                                            @Query("starttime") String starttime, @Query("endtime") String endtime,
                                            @Query("riverId") String riverId, @Query("sectionId") String sectionId,
                                            @Query("distance") Float distance, @Query("isEnd") boolean isEnd,
                                            @Query("startLgtd") Double startLgtd, @Query("startLttd") Double startLttd, @Query("endLgtd") Double endLgtd, @Query("endLttd") Double endLttd,
                                            @PartMap Map<String, RequestBody> externalFileParameters);


    /**
     * 在线离线巡河上传（新的接口）
     *
     * @param patrolId  巡河场次id
     * @param userId    用户id
     * @param isOnLine  是否在线巡河
     * @param starttime 开时时间
     * @param endtime   结束时间
     * @param riverId   河涌id
     * @param sectionId 河段id
     * @param distance  巡河距离
     * @param isEnd     是否结束
     * @param startLgtd 巡河开始经度
     * @param startLttd 巡河开始纬度
     * @param endLgtd   巡河结束经度
     * @param endLttd   巡河结束纬度
     * @return
     */
    @POST("patrol/addOrUpdatePatrol")
    Observable<PathUploadBean> uploadPatrol(@Query("patrolId") String patrolId, @Query("userId") String userId,
                                            @Query("isOnLine") boolean isOnLine,
                                            @Query("starttime") String starttime, @Query("endtime") String endtime,
                                            @Query("riverId") String riverId, @Query("sectionId") String sectionId,
                                            @Query("distance") Float distance, @Query("isEnd") boolean isEnd,
                                            @Query("startLgtd") Double startLgtd, @Query("startLttd") Double startLttd, @Query("endLgtd") Double endLgtd, @Query("endLttd") Double endLttd);


    /**
     * 上传轨迹
     *
     * @param isEnd                  是否结束巡河
     * @param patrolid               巡河id
     * @param externalFileParameters 路径json
     * @return
     */
    @POST("patroltrack/addJsonFiles")
    @Multipart
    Observable<PathUploadBean> uploadLocationList(@Query("userId") String userId, @Query("isEnd") boolean isEnd, @Query("patrolid") String patrolid, @Query("distance") float distance,
                                                  @PartMap Map<String, RequestBody> externalFileParameters);


    /**
     * 开始巡河
     *
     * @param patrolId 巡河id  uuid
     * @param riverId  河流id
     * @param userId   用户id
     * @param lttd     纬度
     * @param lgtd     经度
     * @return
     */
    @POST("patrol/addOrUpdates")
    Observable<StartPatrolBean> startPatrolWithInternet(@Query("patrolId") String patrolId, @Query("riverId") String riverId, @Query("userId") String userId, @Query("lttd") Double lttd, @Query("lgtd") Double lgtd);


    /**
     * 查询当天问题
     *
     * @param userId 用户id
     * @return
     */
    @POST("problem/getProblemByUserIds")
    Observable<ProblemBean> getTodayProblemList(@Query("userId") String userId);

    /**
     * 查询当天问题
     *
     * @param phone
     * @param login_name
     * @return
     */
    @POST("sendcodes")
    Observable<SecurityCodeBindingBean> getSecurityCode(@Query("phone") String phone, @Query("login_name") String login_name);

    /**
     * @param name 图片名
     * @param file 上传的文件
     * @return
     */

    @Multipart
    @POST("common/upload/integral_uploadImg")
    Observable<ImageBean> uploadImgs(@Query("name") String name, @Part MultipartBody.Part file);

    /**
     * @param name 图片名
     * @param file 上传的文件
     * @return
     */

    @Multipart
    @POST("common/upload/integral_uploadFile")
    Observable<FileBean> uploadFiles(@Query("name") String name, @Part MultipartBody.Part file);

    @FormUrlEncoded
    @POST("patrolOther/insertPatrolOther")
    Observable<JSONObject> uploadRiverMsg(@Field("userId") String userId, @Field("picUrl") String picUrl, @Field("fileUrl") String fileUrl, @Field("picNums") int picNums, @Field("fileNums") int fileNums, @Field("tm") String tm);

    /**
     * 办结页面
     *
     * @param name 文件名
     * @param file 文件
     * @return
     */
    @Multipart
    @POST("common/upload/uploadImg")
    Observable<ImageBean> uploadHandlerImg(@Query("name") String name, @Part MultipartBody.Part file);

    @GET("news/findNewsByStatusPage")
    Observable<NewsBean> getNewsMsg(@Query("status") int status, @Query("currentPage") int currentPage, @Query("pageSize") int pageSize);

    @POST("readingpraise/insert")
    Observable<JSONObject> updateComment(@Query("problemId") String problemId, @Query("userId") String userId, @Query("type") String type, @Query("content") String content);

    @GET("readingpraise/getNewsNumsByID")
    Observable<JSONObject> getStarNum(@Query("newsId") String newsId);


    @POST("readingpraise/findByStatusProblemIdCount")
    Observable<JSONObject> toStar(@Query("problemId") String problemId, @Query("userId") String userId, @Query("type") String type);

    @GET("news/findNewsByStatusPageapp")
    Observable<NewsBean> getLakeNewsMsg(@Query("status") int status, @Query("currentPage") int currentPage, @Query("pageSize") int pageSize);

    @GET("problem/getProblemWhiteSeaSurgeApp")
    Observable<SeasureAppBean> getSeasurgeMsg(@Query("riverid") String riverid, @Query("currentPage") int currentPage, @Query("pageSize") int pageSize);

    @GET("patrol/getDetailWhiteSeaSurgeApp")
    Observable<PartrolRouteBean> getDetailSeasurgeMsg(@Query("riverid") String riverid);


    @GET("RiverTargetMeasureApp/getRiverTargetMeasure")
    Observable<OneRiverOneRuleBean> getListRiverOneRuleMsg(@Query("status") String status);

    @GET("RiverTargetMeasureApp/getRiverTargetMeasure")
    Observable<OneRiverOneRuleBean> getListRiverOneRuleMsgForOneArea(@Query("status") String status, @Query("parentId") String parentId);

    @GET("RiverTargetMeasureApp/getRiverTargetMeasureId")
    Observable<OneRiverOneRuleDeatailBean> getListRiverOneRuleMsgById(@Query("id") String status);


    @GET("problem/getProblemWhiteSeaSurgeBasinApp")
    Observable<SeasureAppBean> getbasinMsg(@Query("type") String typeId, @Query("currentPage") int currentPage, @Query("pageSize") int pageSize);

    @GET("patrol/getDetailWhiteSeaSurgeBasinApp")
    Observable<PartrolRouteBean> getBasinDetailSeasurgeMsg(@Query("type") String type);


    @GET("appRiver/DictType")
    Observable<ProblemTypeDataBean> getProblemTypeDataBean(@Query("type") String type);

    @GET("appRiver/DictType")
    Observable<PatrolRiverTime> getPatrolRiver(@Query("type") String type);

    @GET("problem/Appproblem")
    Observable<StandardBean> getProblemStandardMsg(@Query("strtime") String time, @Query("userId") String userId, @Query("type") String type);

    @GET("problem/AppProblemSand")
    Observable<ProblemStaticBean> getCurrentStaticProblen(@Query("strtime") String time, @Query("endtime") String endtime, @Query("userId") String userId);

    @GET("problem/AppProblemSandDate")
    Observable<MoreLineProBlemBean> getMoreLineProblem(@Query("userId") String userId, @Query("type") String type);

    @GET("problem/AppProblemSandType")
    Observable<RingBean> getCurrentStaticProblenSandType(@Query("strtime") String time, @Query("endtime") String endtime, @Query("userId") String userId);

    @GET("problem/AppProblemSandProblemType")
    Observable<WxyyBean> getWxyyProblemSandType(@Query("strtime") String time, @Query("endtime") String endtime, @Query("userId") String userId, @Query("type") String type, @Query("STATE") String state, @Query("riverName") String riverName, @Query("currentPage") int currentPage, @Query("pageSize") int pageSize);

    @GET("river/RmRiveBByuserId")
    Observable<CurrentRiverBean> getRiverSystemBean(@Query("userId") String userId);

    @POST("riveroffice/getRiveroffice")
    Observable<RiverChiefBeanMsg> getRiverChiefBean(@Query("userId") String userId, @Query("type") int value);


    @POST("riveroffice/getRiveroffice")
    Observable<RiverDutyBean> getRiverDutyBean(@Query("userId") String userId, @Query("type") int value);


}
